[iOS] 2020年11月15日以降にCrashlyticsへのdSYMアップロードが失敗する事象への対処方法について
はじめに
こんばんは。CX事業本部の平屋です。
最近、CrashlyticsへのdSYMアップロードが失敗する事象に遭遇しました。調査の結果、対処する方法を発見しましたので、その方法を紹介します。
検証環境
- Xcode Version 12
事象
2020年11月15日頃からCrashlyticsへのdSYMアップロードが失敗する事象が発生するようになりました。
対象のアプリはCIでビルドを行い、SDKのupload-symbols
コマンドでdSYMアップロードを行っていましたが、dSYMアップロードだけが失敗するようになっていました。
エラーの内容は以下の通りで、当該アプリで使用しているAlamofire
のdSYMアップロードに失敗しています。
error: Failed uploading cSYMs due to error: Error Domain=com.twitter.FABCompoundOperation.error Code=4294967293 "(null)" UserInfo={com.twitter.FABCompoundOperation.error.user-info-key.underlying-errors=( "Error Domain=com.crashlytics.mac.error-domain.submit-csym Code=0 \"Failed to submit cSYM for architecture armv7 with uuid XXXXXXXXXX in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM\" UserInfo={NSLocalizedFailureReason=Failed to submit cSYM for architecture armv7 with uuid XXXXXXXXXX in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM, NSUnderlyingError=0x7fdd5bf11d00 {Error Domain=FABNetworkError Code=-6 \"(null)\" UserInfo={retryLimit=10, NSErrorFailingURLStringKey=https://cm.crashlytics.com/api/v3/platforms/ios/code_mappings}}}", "Error Domain=com.crashlytics.mac.error-domain.submit-csym Code=0 \"Failed to submit cSYM for architecture arm64 with uuid a2994177b2893f76b1b712677a652fbb in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM\" UserInfo={NSLocalizedFailureReason=Failed to submit cSYM for architecture arm64 with uuid a2994177b2893f76b1b712677a652fbb in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM, NSUnderlyingError=0x7fdd5bf0b5b0 {Error Domain=FABNetworkError Code=-6 \"(null)\" UserInfo={retryLimit=10, NSErrorFailingURLStringKey=https://cm.crashlytics.com/api/v3/platforms/ios/code_mappings}}}"
原因
今回の事象の原因は古いバージョンのSDKのコマンド(Fabricのupload-symbols
)を使用していることが原因でした。
こちらのFirebase Crashlytics(iOS)の公式のガイドページには、2020年11月24日現在、以下の注意書きが表示されています。
Fabric の終了: 以前の Fabric SDK と Firebase Crashlytics SDK の古いバージョンは非推奨になりました。2020 年 11 月 15 日以降はアプリのクラッシュが報告されなくなります。 Fabric からアプリを移行し、Firebase コンソールでクラッシュ レポートを引き続き受信したい場合は、アップグレード ガイドにアクセスし、特定のバージョンの Firebase Crashlytics SDK(Android の場合は 17.0.0 以降、iOS の場合は 4.0.0 以降、Unity の場合は 6.15.0 以降)を使用していることを確認してください。
これを見た際に、もしかして古いバージョンのSDKのコマンドを使用しているのでアップロードが失敗しているのでは? と思い、確認してみると、CI上でdSYMアップロードを行う際に使用しているスクリプトで、古いバージョンのSDKのコマンドを使用していました。
FabricからFirebaseへ移行する際に、アプリ側で使用するSDKは最新版のFirebase Crashlytics SDKに変更しましたが、CI用のスクリプトの対応が漏れていました。
対処方法
古いバージョンのSDKのコマンドを、Firebase Crashlytics SDKのコマンドに書き換えると、アップロードが成功しました。(SDKのインストールにはCocoaPodsを使用)
- 変更前:
/Pods/Fabric/upload-symbols
- 変更後:
/Pods/FirebaseCrashlytics/upload-symbols
公式のガイドページの注意書きや、今回の事象に遭遇した時期からの推測ですが、2020年11月15日を過ぎたあたりから、古いSDKからのアップロードを受け付けないようになったのではないかと思います。
なお、Firebase Crashlytics SDK
のupload-symbols
の使用例は以下のページに記載されています
さいごに
本記事では、CrashlyticsへのdSYMアップロードが失敗する事象への対処方法についてを紹介しました。同様の事象に遭遇している方の参考になれば幸いです。